#include "../aclib/Cryptor.h"
#include "../aclib/Block.h"
#include "../aclib/LastBlockHandler.h"
#include "../aclib/LastBlockDecryption.h"
#include "../aclib/LastBlockEncryption.h"

namespace AC = AppliedCryptography;

template<unsigned int TKeySize, unsigned int TBlockSize>
class MLastBlockHandler : public AC::LastBlockHandler<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD4_T(Process, AC::Block<TBlockSize>(
		const AC::Cryptor<TKeySize,TBlockSize>&, 
		const AC::Block<TBlockSize>&,
		unsigned int lastBlockLength,
		AC::Block<TBlockSize>&));
};

template<unsigned int TKeySize, unsigned int TBlockSize>
class MLastBlockEncryption : public AC::LastBlockEncryption<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD4_T(Process, AC::Block<TBlockSize>(
		const AC::Cryptor<TKeySize,TBlockSize>&, 
		const AC::Block<TBlockSize>&,
		unsigned int lastBlockLength,
		AC::Block<TBlockSize>&));
};

template<unsigned int TKeySize, unsigned int TBlockSize>
class MLastBlockDecryption : public AC::LastBlockDecryption<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD4_T(Process, AC::Block<TBlockSize>(
		const AC::Cryptor<TKeySize,TBlockSize>&, 
		const AC::Block<TBlockSize>&,
		unsigned int lastBlockLength,
		AC::Block<TBlockSize>&));
};

